|
Object schizophrenia or self schizophrenia is a complication arising from delegation and related techniques in object-oriented programming. An object can be defined as a computing concept combining data and behavior, and having an identity. Objects are typically built on class systems. A ''base class'' provides the fundamental or default behavior of an object, and acts as a template for creating objects. A ''derived class'' can be used to override behaviors of a base class, and can be used as a template for objects whose behaviors refine those of the base class. As an alternative to inheritance, which is a relatively static concept, some programming languages use delegation.〔Lynn Andrea Stein, Delegation is Inheritance. Conference on Object Oriented Programming Systems Languages and Applications, Orlando, Florida, 1987, United States, pp. 138 - 146〕 Instead of using one class to refine another, delegation allows one object to override the behavior of another. The original object ''a'' (analogous to the base class behaviors) can ''delegate'' some of its methods to another object ''b'' (analogous to the derived class behaviors). If ''a'' delegates its ''foo'' method to the ''bar'' method of ''b'', then any invocation of ''foo'' on ''a'' will cause ''bs ''bar'' method to execute. However, ''bar'' executes in the context of the ''a'' object, for example, its self identifier refers to ''a'' rather than to ''b''.When delegation is used, the question arises: What is the identity of the object ''a''? The identity is split. There are two potentially meaningful self values when executing a method of ''a''. This problem does not arise in most class-based languages, because an object has a single physical identity. With delegation, the object has two identities.By way of metaphor with the public confusion of dissociative identity disorder with the psychiatric diagnosis of schizophrenia, the former being associated with "split personalities," this configuration is called ''object schizophrenia'' or ''self schizophrenia'' in object-oriented programming.〔Uwe Aßmann, ''Invasive Software Composition'', Springer-Verlag, 2003, p. 39.〕 ==History and discussion== Herrmann〔Stephan Herrmann, ''(Demystifying Object Schizophrenia )'', in Proceedings of (MASPEGHI Workshop ) at (ECOOP 2010 )〕 reports that the term was coined by William Harrison, IBM Research, around May 1997 in a set of web pages, which discussed problems incurred by some of the common design patterns (these web pages are no longer publicly available). In the given examples the problem was aggravated by the fact that typical solutions would use a weaker form of delegation (sometimes called forwarding) where knowledge about the original receiver object is actually lost during delegation. Here the use of forwarding is owed to the fact that most mainstream object-oriented programming languages do not support the stronger form of delegation. Harrison et al proposed subject-oriented programming as a solution, which by static composition avoids any issues of object schizophrenia. On the other end of the spectrum, Herrmann shows that a language featuring contextual roles can be designed in such a way that potential problems of object schizophrenia are essentially irrelevant despite using delegation as a means to share behavior between a ''role object'' and its associated ''base object''. 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Schizophrenia (object-oriented programming)」の詳細全文を読む スポンサード リンク
|